package obra;

import java.util.List;

import org.hibernate.Query;
import org.hibernate.Session;

import construtora.Construtora;


public class ObraDAOHibernate implements ObraDAO{

	private Session	session;

	public void setSession(Session session) {
		this.session = session;
	}

	public void salvar(Obra obra) {
		this.session.save(obra);
	}

	public void atualizar(Obra obra) {

		this.session.merge(obra);
	}

	public void excluir(Obra obra) {
		this.session.delete(obra);
	}

	public Obra carregar(Integer codigo) {
		//TODO o hibernate nao conseguira fazer a carga caso seja passado o Obra
		// no parametro, tem que ser diretamente a chave (integer)
		return (Obra) this.session.get(Obra.class, codigo);
	}


	@SuppressWarnings("unchecked")
	public List<Obra> listar() {
		return this.session.createCriteria(Obra.class).list();
	}

	@SuppressWarnings("unchecked")
	@Override
	public List<Obra> listarObrasConstrutora(Construtora construtora) {
		String hql = "select o from Obra o where o.construtora = :construtora";
		Query consulta = this.session.createQuery(hql); 
		consulta.setEntity("construtora", construtora);

		//TODO mostrar primeiramente com o list e depois apresentar o uniqueResult
		List<Obra> obras = consulta.list();
		return obras;
	}


}
